package config

// AppConfig 应用配置结构
type AppConfig struct {
	Server   ServerConfig   `mapstructure:"server"`
	Database DatabaseConfig `mapstructure:"database"`
	Log      LogConfig      `mapstructure:"log"`
	Storage  StorageConfig  `mapstructure:"storage"`
	JWT      JWTConfig      `mapstructure:"jwt"`
}

// ServerConfig 服务器配置
type ServerConfig struct {
	Host string `mapstructure:"host"`
	Port int    `mapstructure:"port"`
	Mode string `mapstructure:"mode"` // debug, release, test
}

// DatabaseConfig 数据库配置
type DatabaseConfig struct {
	Host     string `mapstructure:"host"`
	Port     int    `mapstructure:"port"`
	User     string `mapstructure:"user"`
	Password string `mapstructure:"password"`
	DBName   string `mapstructure:"dbname"`
	SSLMode  string `mapstructure:"sslmode"`
	TimeZone string `mapstructure:"timezone"`
}

// LogConfig 日志配置
type LogConfig struct {
	Level       string `mapstructure:"level"`       // debug, info, warn, error, fatal
	ToFile      bool   `mapstructure:"to_file"`     // 是否输出到文件
	Development bool   `mapstructure:"development"` // 是否开发模式（易读格式）

	// 日志文件路径
	AccessLogPath string `mapstructure:"access_log_path"`
	BizLogPath    string `mapstructure:"biz_log_path"`
	AuditLogPath  string `mapstructure:"audit_log_path"`
	SystemLogPath string `mapstructure:"system_log_path"`
	DebugLogPath  string `mapstructure:"debug_log_path"`
	AuthLogPath   string `mapstructure:"auth_log_path"`
}

// StorageConfig 存储配置
type StorageConfig struct {
	Type      string `mapstructure:"type"`       // local, minio
	LocalPath string `mapstructure:"local_path"` // 本地存储路径

	// MinIO配置（当type=minio时使用）
	MinIOEndpoint  string `mapstructure:"minio_endpoint"`
	MinIOAccessKey string `mapstructure:"minio_access_key"`
	MinIOSecretKey string `mapstructure:"minio_secret_key"`
	MinIOBucket    string `mapstructure:"minio_bucket"`
	MinIOSSL       bool   `mapstructure:"minio_ssl"`
}

// JWTConfig JWT配置
type JWTConfig struct {
	Secret            string `mapstructure:"secret"`             // JWT密钥
	Expiration        int    `mapstructure:"expiration"`         // access token过期时间（小时）
	RefreshExpiration int    `mapstructure:"refresh_expiration"` // refresh token过期时间（小时，默认7天）
}
